package com.sdk.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

/**
 * Created by 20170801 on 2017/11/24.
 */

public class FileUtils {

    /**
     * 拷贝文件
     * @param srcpath 原路径 dstpath 目的路径
     * @return 拷贝是否成功
     */
    public static boolean copyFile(String srcpath, String dstpath){
        return copyFile(new File(srcpath), new File(dstpath));
    }

    private static boolean copyFile(File srcfile, File dstfile){
        boolean status = false;
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            if (!srcfile.isDirectory() && !dstfile.isDirectory()) {
                fis = new FileInputStream(srcfile);
                fos = new FileOutputStream(dstfile);

                byte[] bytearray = new byte[1024];
                while (true){
                    int len = fis.read(bytearray);
                    if(len == -1){
                        break;
                    }
                    fos.write(bytearray, 0, len);
                }
                fos.flush();
                fis.close();
                fos.close();
                status = true;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if (fis != null) {
                    fis.close();
                }
                if (fos != null) {
                    fos.close();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return status;
    }

    /**
     * 获得指定文件的byte数组
     * @param filePath 文件绝对路径
     * @return
     */
    public static byte[] file2Byte(String filePath){
        ByteArrayOutputStream bos=null;
        BufferedInputStream in=null;
        try{
            File file=new File(filePath);
            if(!file.exists()){
                throw new FileNotFoundException("file not exists");
            }
            bos=new ByteArrayOutputStream((int)file.length());
            in=new BufferedInputStream(new FileInputStream(file));
            int buf_size=1024;
            byte[] buffer=new byte[buf_size];
            int len=0;
            while(-1 != (len=in.read(buffer,0,buf_size))){
                bos.write(buffer,0,len);
            }
            return bos.toByteArray();
        }
        catch(Exception e){
            e.printStackTrace();
            return null;
        }
        finally{
            try{
                if(in!=null){
                    in.close();
                }
                if(bos!=null){
                    bos.close();
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    }

    /**
     * 根据byte数组，生成文件
     * @param bfile 文件数组
     * @param filePath 文件存放路径
     * @param fileName 文件名称
     */
    public static boolean byte2File(byte[] bfile,String filePath,String fileName){
        boolean status = false;

        BufferedOutputStream bos=null;
        FileOutputStream fos=null;
        File file=null;
        try{
            File dir=new File(filePath);
            if(!dir.exists() && !dir.isDirectory()){//判断文件目录是否存在
                dir.mkdirs();
            }
            file=new File(filePath+fileName);
            fos=new FileOutputStream(file);
            bos=new BufferedOutputStream(fos);
            bos.write(bfile);

            status = true;
        }
        catch(Exception e){
            e.printStackTrace();
        }
        finally{
            try{
                if(bos != null){
                    bos.close();
                }
                if(fos != null){
                    fos.close();
                }
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
        return status;
    }
}
